#include "CMDMapper.h"
#include "CommandToken.h"
#include "TireTree.h"
#include "PublicUtils.h"
#include "Global.h"
/**
 * @brief 判断输入是否合法
 * @param parameter 会改变参数内容，最终为合法命令的第二个参数内容
 * @return 合法返回1，非法返回0
 * @author 牢大
*/
int handleCommand(unsigned short *command, char *parameter){

    // 去头尾空格
    trim(parameter);
    // 单命令不用判断后面参数
    int isSingleCmd = query(parameter, strlen(parameter));

   
    /* 若未登录 */
    if(isLogin == 0){
        if(isSingleCmd == LOGIN || isSingleCmd == REGISTER){
            *command = isSingleCmd;
            return 1;
        }
        printf("请先登录\n");
        return 0;
    }

    /* 不能重复登录 */
    if(isSingleCmd == LOGIN || isSingleCmd == REGISTER){
        printf("宁已登录\n");
        return 0;
    }

    // 如果是无参命令
    if(isSingleCmd == PWD || isSingleCmd == LS){
        *command = isSingleCmd;
        return 1;
    }

    // 判断输入是否合法
	char cmd[10];//存储命令
    char text[1024];//存储命令相关文本

	//以空格作为分隔，将提取到的第一个令牌存储到token中
    char *token = strtok(parameter, " ");
    if(token == NULL){
        printf("非法命令2\n");
        return 0;
    }
	//将第一个令牌复制到cmd数组中
    strcpy(cmd, token);

	//继续获取下一个令牌
    token = strtok(NULL, " ");
    if(token == NULL){
        printf("非法命令3\n");
        return 0;
    }
	//将第二个令牌复制到text数组中
    strcpy(text, token);

	
    int ret = query(cmd, strlen(cmd));
    if(ret == -1){
        printf("非法命令4\n");
        return 0;
    }

    // 合法命令需要赋值给command
    *command = ret;

    strcpy(parameter, text);

    if(*command == PUT_FILE || *command == GET_FILE){
        return 2;
    }
    return 1;
}